#ifndef SERIALCONTROL_H
#define SERIALCONTROL_H

#include <QObject>
#include <QVector>
#include <QtSerialPort/QSerialPort>
#include <QMap>

class SerialControl : public QObject
{
    Q_OBJECT

public:
    SerialControl(QObject* parent = nullptr);
    QVector<QPair<QString, QString>> getSerialPortList();
    bool open(const QString& portName);
    void close();

    void receive();

    enum FrameType {
        UpTime = 0x30,
        DownTime,
        MaxTransmit,
        MinTransmit,
        RuntimeTransmit,
        TransmitCurve
    };

signals:
    void received(FrameType frameType, QVector<double> frame);

private:
    void parseUpTime(const QByteArray& byteArray);
    void parseDownTime(const QByteArray& byteArray);
    void parseMaxTransmit(const QByteArray& byteArray);
    void parseMinTransmit(const QByteArray& byteArray);
    void parseRuntimeTransmit(const QByteArray& byteArray);
    void parseTransmitCurve(const QByteArray& byteArray);
    double parseRealValue(const QByteArray& byteArray);

    QSerialPort* serialPort;
    QMap<FrameType, void (SerialControl::*)(const QByteArray&)> parser;
    QByteArray recvBytes;
};

#endif // SERIALCONTROL_H
